perm filename MSG.SAV[PAT,LMM]2 blob sn#066034 filedate 1973-10-05 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00067 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00008 00002	UNSORTED MESSAGE.COPY:
C00017 00003	RE: PATTERN MATCH DATE ~MAY
C00024 00004	PATTERN PROBLEMS:
C00025 00005	FROM MASINTER:
C00026 00006	From: MASINTER Re:   RECORDS
C00028 00007	From: CARHART       Re:   CYCGEN (?)BUGS(?)
C00033 00008	FROM TEITELMAN RE: IN VALID
C00034 00009	Date: 2-SEP-73  From: TEITELMAN Re: Various
C00036 00010	Date: 2-SEP-73  From: TEITELMAN
C00041 00011	Date: 2-SEP-73  From: TEITELMAN 
C00042 00012	Date: 2-SEP-73  From: TEITELMAN 
C00044 00013	Date: 2-SEP-73  From: TEITELMAN  Re: SURRENDER
C00045 00014	Date: 2-SEP-73  From: TEITELMAN  Re: I.S.OPR
C00047 00015	Date:  4-SEP-73  404 From: TEITELMAN
C00048 00016	Date:  5-SEP-73 1950-PDT From: SRIDHARAN Re:   LABELLING PAPER
C00049 00017	Date:  5-SEP-73 1955-PDT  From: SRIDHARAN  Re:   NEW FILES
C00051 00018	Date: 30-AUG-73 2354 From: TEITELMAN Re:   MEMO
C00054 00019	From: BRYANT at BBN-TENEX
C00056 00020	Date: 4-SEP-73 2015 From: TEITELMAN Re: SYSTEM DATE cc: LISP USERS
C00057 00021	Date:  4-SEP-73 2016 From: TEITELMAN cc:   LAMPSON
C00058 00022	Date:  5-SEP-73 1147 From: TEITELMAN Re:NEW LISP,CHANGES IN I.S.cc:   LISP USERS
C00059 00023	Date: 10-SEP-73 2340 From: TEITELMAN
C00060 00024	Date: 11-SEP-73  056  From: TEITELMAN Re:   VARIOUS
C00061 00025	Date: 11-SEP-73  103 From: TEITELMAN
C00064 00026	Date: 11-SEP-73  209 From: TEITELMAN
C00065 00027	Date: 11-SEP-73  251 From: TEITELMAN
C00066 00028	Date: 11-SEP-73  308 From: TEITELMAN Re:   STRPOSL
C00067 00029	Date: 11-SEP-73  150 From: TEITELMAN 
C00068 00030	Date: 12-SEP-73  354 From: TEITELMAN
C00070 00031	Date: 12-SEP-73  518 From: TEITELMAN
C00071 00032	Date: 12-SEP-73 1719-EDT From: BRYANT at BBN-TENEX Re:SOME NOTES ON <NEWLISP>LISP AT BBN
C00074 00033	Date: 12-SEP-73  518 From: TEITELMAN Re: WORKING MY WAY THRU YOUR VARIOUS GOODIES.
C00075 00034	Date: 13-SEP-73 1609 From: TEITELMAN Re:   PRSTRUC
C00077 00035	Date: 13-SEP-73 1609 From: TEITELMAN
C00078 00036	Date: 13-SEP-73 1652 From: TEITELMAN Re:   FGETD
C00080 00037	Date: 13-SEP-73 1806 From: TEITELMAN Re:   NEW FEATURES IN ITERATIVE STATEMENTS
C00082 00038	FROM MASINTER, RE RECORDS
C00084 00039	Date: 14-SEP-73  215 From: TEITELMAN
C00085 00040	Date: 14-SEP-73  453 From: TEITELMAN Re:   NEW LISP
C00086 00041	Date: 14-SEP-73 1545 From: TEITELMAN
C00087 00042	Date: 15-SEP-73 1657 From: TEITELMAN 
C00089 00043	Date: 15-SEP-73 1715 From: TEITELMAN Re:   LOWERCASING
C00090 00044	Date: 15-SEP-73 1729 From: TEITELMAN 
C00091 00045	Date: 15-SEP-73 1734 From: TEITELMAN
C00092 00046	Date: 18-SEP-73  722 From: TEITELMAN
C00093 00047	Date: 18-SEP-73  810 From: TEITELMAN
C00096 00048	Date: 19-SEP-73  215 From: TEITELMAN
C00097 00049	Date: 19-SEP-73  337 From: GUEST Re:   labeller paper
C00098 00050	FROM MASINTER RE: RECORDS:
C00100 00051	Date: 28-SEP-73 2322 From: TEITELMAN Re:   FIRST OF MANY
C00101 00052	Date: 28-SEP-73 2337 From: TEITELMAN Re:   2
C00103 00053	Date: 28-SEP-73 2348 From: TEITELMAN
C00104 00054	Date: 29-SEP-73 1513 From: TEITELMAN
C00107 00055	Date: 29-SEP-73 1533 From: TEITELMAN Re:   MORE
C00112 00056	Date:  1-OCT-73 2018 From: TEITELMAN
C00113 00057	Date:  2-OCT-73  045 From: TEITELMAN
C00114 00058	Date:  2-OCT-73  100 From: TEITELMAN
C00115 00059	Date:  2-OCT-73  114 From: TEITELMAN
C00116 00060	Date:  3-OCT-73 1327 From: TEITELMAN
C00117 00061	Date:  3-OCT-73 1751 From: TEITELMAN Re:   CLISPRECORD
C00121 00062	Date:  3-OCT-73 1813 From: TEITELMAN
C00123 00063	Date:  4-OCT-73 1720 From: TEITELMAN Re:   YOUR MESSAGE
C00124 00064	Date:  4-OCT-73 1758 From: TEITELMAN Re:   VARIOUS RECORD STUFF
C00129 00065	From: MASINTER
C00131 00066	Date:  5-OCT-73 0306-EDT From: TEITELMAN 
C00133 00067	 THE JUSTIFICATION FOR USING THE ACCESSFN INSTEAD OF THE GETHASH
C00135 ENDMK
C⊗;
UNSORTED MESSAGE.COPY:
________________________________________________________________________________
THIS IS A STRANGE ONE:
←DEFINE(((TEST(X)(FOO-FIE ← 'A]
(TEST)
←DWIMIFY(TEST]
FOO-FIE←'A {in TEST} treated as clisp
TEST
←?? -1


3. ←DWIMIFY(TEST)
FOO-FIE←'A {in TEST} treated as clisp
parenthesis error in
(QUOTE ("FOO-FIE←'A % { "in " (PRIN2 TEST T) } " treated" " as clisp"
% 
 (CLISP% (QUOTE "FOO-FIE←'A" % "in " .........


and continues trying to print out a circular list, which contains
CLISP% 's (!!!!!) and QUOTE's with more than one thing in them...


it all happens inside a call to APPLY in PRINTHISTORY1, with the function
CLISP%  ... but it's the DWIMIFY(TEST) message which screws things
(I looked at LISPXHISTORY with CLISPTRANFLAG set to XXXX).

________________________________________________________________________________

(1) IN AN EDITING SESSION, I SAID DW, GOT PROMPTED FOR SOME
SPELLING CORRECTIONS, VIZ

CROPFNS -> CROPFN S ? 

I REPLIED Yes AND THEN REALIZED THAT IT WAS WRONG... WAS SUPPOSED
TO BE CROPFN;  UNDID THE DW, AND THEN TRIED DW AGAIN... HOWEVER, IT
SEEMED TO REMEMBER THE RESPELLS, AND JUST SAID
CROPFNS -> CROPFN S ?

(I.E., THE RESPELLS, IF IT IS GOING TO REMEMBER THEM, SHOULD BE 
UNDOABLE)..

THE OTHER THING IS THAT, AFTER EXITING THE EDITOR, AND REENTERING,
AND TRYING IT AGAIN, AND RESPONDING NO TO
CROPFNS -> CROPFN S ?, IT DIDN'T EVEN TRY
CROPFNS -> CROPFN , EVEN THOUGH CROPFN WAS A LAMBDA VAR, BUT
S WAS NOT BOUND OR A LAMBDA VAR OR ANYTHING...

I.E. THIS MISSING SPACE SPELLING CORRECTION SEEMS TO OVERRIDE THE
NORMAL ONE...
________________________________________________________________________________
CLISPIFY((EVERY X (FUNCTION FOO]

(EVERY X (FOO]

..
________________________________________________________________________________

DWIMIFY((FOR X ON L WHEN (AND (FOO X)(FIE X)) DO (PRINT X]

THE TRANSLATION IS FINE, BUT THE FOR GETS CHANGED TO

(FOR X ON L WHEN (AND (FOO X) (FIE X) (PRINT X)) DO (PRINT X]

(IT TRANSLATES TO A MAP WITH (AND (FOO X)(FIE X)(PRINT X))..
THAT AND CAN'T BE NCONC1'ED, THOUGH.

			LARRY
________________________________________________________________________________
DWIMIFY((FOR X IN L WHEN (EXPR X ) COLLECT X]

TRANSLATION: (MAPC L (FUNCTION (LAMBDA (X)
			(AND (EXPR X)
			     (LIST X]
________________________________________________________________________________
I MADE A TAPE OF THE PAPER TO BRING DOWN TO CAMPUS, BUT HAVE BEEN
HAVING TROUBLE READING IT... BOB ENGLEMORE IS WORKING ON TRYING TO
READ IT; YOU SHOULD ASK HIM IF HE WAS ABLE TO.

I WILL LOOK AT &J525.KERNEL.TECHIQUE.TRY2... AS FOR THE CUTTING
AND PASTING; AS SOON AS YOU HAVE THE SOURCE ON FILE ON WYLBUR,
COULD YOU MAKE THE CHANGES IN THE FILE?   I HOPE TO EVENTUALLY PUB
THE THING; SO TRY AND MAINTAIN PUB FORMAT, PLEASE....
(ANY QUESTIONS ABOUT IT, PLEASE CALL ME)

THANKS.
________________________________________________________________________________
IN THE FILE BRKDWN.COM ON <LISP>, THE DEFINITION OF BRKDWNCONSES
IS INCORRECT;  HOWEVER, IF I SET BRKDWNTYPE TO CONSES, AND THEN
PUTD(BRKDWNCONSES], REMOVING THE OLD DEFINITION, THE NEW DEFINITION
GENERATED IS OK... (ALTHOUGH IT MIGHT NOT REALLY BE BRKDOWNCONSES,
SINCE  BRKDWNTYPE←'CONSES, BREAKDOWN(FOO) PUT A CALL TO BREAK1 (!!!)
IN THE DEFINITION OF FOO, RATHER THAN A CALL TO BRKDWN2.   
________________________________________________________________________________
I LOOKED AT THE BREAKDOWN STUFF, AND WAS NOT ABLE TO REPRODUCE
IT IN A CLEAN SYSTEM; SO I AM NOT SURE WHAT CAUSED IT... WILL BANG
ON IT SOME MORE (AS I AM DOING TIMING/CONSCOUNTING IN THE MATCHER),
AND SEE IF IT CROPS UP AGAIN... UNTIL THEN, IGNORE PREVIOUS MESSAGE...
SORRY.
					LARRY
________________________________________________________________________________

MARK'S PHONE
941-8822

WED .. JONATHAN KING MEETING

MONTERREY.. JAZZ FESTIVAL. 
________________________________________________________________________________
NEW MATCH AND MATCH.COM ON <LISP>. I BELIEVE THAT THIS PACKAGE
IS COMPLETE (WORKS FOR ALL POSSIBLE PATTERNS AS DESCRIBED IN THE
WRITEUP) AND GENERATES REASONABLY EFFICIENT CODE, WITHIN THE 
CONSTRAINT THAT FEW "NEW" FUNCTIONS ARE USED 

NO NEW FEATURES ARE CONTAINED IN IT (I.E. NO ANDS, ORS, OR NOTS, AND
THE FAST $ IS NOT IMPLEMENTED).  


THERE WILL BE A NEWER RELEASE SHORTLY, WHICH WILL CHECK FOR
POSSIBLE (AND CURRENTLY ILLEGAL) CLISP CONSTRUCTIONS WITHIN
THE PATTERN, I.E. (&←<'A 'B> ...).

ALSO, THE FUNCTION MAKEMATCH TAKES A THIRD ARGUMENT, STARREPLACED.
IF THIS IS NON-NIL, THEN A * WITHIN THE PATTERN IS INTERPRETED
TO MEAN "REPLACE THIS WITH STARREPLACED" RATHER THAN "RETURN THIS".
I.E. IF YOU SEE X:('A * --)←FOO, AND CALL MAKEMATCH WITH
X, ('A * --) , AND FOO, THEN (AND (EQ (CAR X) (QUOTE A)) (RPLACA (CDR X)
 FOO)))   WILL BE GENERATED (THE RPLAC IS LOOKED UP, OF COURSE).

			LARRY
________________________________________________________________________________
ED FEIGENBAUM ASKED ME TO GET IN TOUCH WITH YOU WITH REGARD TO
PROBLEMS HE ENCOUNTERED USING RSEXEC.  I HAVE HIS TYPESCRIPT --
LOOKS AS I THE RSEXEC SURVEY GOT BACK "I-O TO UNASSIGNED CHANNEL."
INSTEAD OF THE SURVEY INFO.  THE PROBLEM HASN'T SHOWED UP AGAIN, BUT,
WELL,   I'D BE MORE THAN WILLING TO HELP WHATEVER I CAN..
I TRIED CALLING YOU TODAY, BUT I GUESS IT WAS TO LATE.  YOU CAN
CALL ME AT (415) 321-2300 X 4878, OR SEND ME A MESSAGE AT
MASINTER@ISI

			LARRY MASINTER
RE: PATTERN MATCH DATE ~MAY
1. FUTURE - LOOKUP LAST AND MEMB SO USER CAN MAKE FAST DECLARATION.
6.  LOOK UP RPLACA AND RPLACD SO USER CAN DECLARE FOR FRPLACA AND
/RPLACA, ETC.  IF YOU WANT TO INSTALL LOOKUP NOW, DO 

(CLISPLOOKUP FN-NAME NIL NIL (GETP FN-NAME 'LISPFN)),

OR TO BE MORE EFFICIENT, SINCE MOST FUNCTIONS WONT HAVE THEIR OWN
DECLARATIONS, INCLUDE THE CODE FROM THE FUNCTION CLISPLOOKUP (WHICH
IS CONTAINED IN THE FILE CLISP) INYOUR OWN BLOCK. CLISPLOOKUP0 IS
OUTSIDE OF THE DWIMBLOCK SINCE IT IS ONLY CALLED WHEN A FULL LOOKUP
HAS TO BE DONE.  IN MOST CASES,  THE SIMPLE FUNCTION SHOWN IN
CLISPLOOKUP WILL SUFFICE.


2. USE ASSOC WHERE POSSIBLE, AND LOOK IT UP ALSO SO USER CANUSE
FASSOC.

3. INSTALL A FLAG OR NEW E.P. (ELEMENTARY PATTERN) CORRESPONDING TO
$ THAT DOES NOT CONTINUE SEARCHING ONCE IT SUCCEEDS (FUZZY CONCEPT),
E.G. ($ ('A $2) $) WOULD BE AN ASSOC WITH A CHECK ON THE LENGTH OF
THE EEMENT,  BUT WOULD NOT CONTINUE SEARCHING FOR ANOTHER 'A,
SIMILARLY ($ 'A 'B $) WOULD BE (EQ (CADR (MEMB 'A X) 'B)). I THINK
THE DEFAULT FOR $ SHOULD BE THIS WAY,  AND THAT SOMETHNG LIKE $$
WOULD MEAN SEARCH YOUR ASS OFF.

7. CHANGE THE INITIAL VARIABLE DEFAULT TO = AND POSTPONE-SETQ-FLG TO
NIL,  I.E. DONT POSTPONE.

8. MAKE SURE THAT POSTPONE SETQ FLG REALLY WORKS. FOR EXAMPLE IN THE
PATTERN (A←($ !B←'FOO ($ !==C))), IF POSTPONESETQFLG IS NIL,  THEN
THERE IS NO NEED FOR DUMMY VARIABLES NOR FOR A PROG,  I.E. YOU CAN
USE THE VARIABLES MENTIONED IN THE PATTERN FOR STORING TEMORARY
RESULTS.

9. X:($1 *←!(3 4) 5) CAN YOU IMPROVE THE DIAGNOSTIC SO AS NOT TO BE
SO SCARY? ALSO WHY ARE 3 AND 4 QUOTED AND 5 DEFAUTED (ACTUALLY 3 4
AND 5 SHOULD BE LEFT AAONE SINCE THEY ARE NUMBERS, BUT I PRESUME IF
THEY HAD BEEN LITATOMS THE SAME WOULD HOLD)

10. WHY DOES X:($ !X←(3 4) $) GO TO A PROG, BUT X:($ X←(3 4) $) TO A
SOME?

12. *****WRONG - X:($ !(A B) C D) ALSO X:($ !($1 $2) $3) X:($ !(A B)
C D $)

13. LOOK AT X:($ Z $) WITH DEFAULT FOR ASSIGNMENT. I DONT UNDERSTAND
THE SOME WITH (LAMBDA (X) T)

14. X:($ 'A !* $1) COULD BE BETTER.

15. IN YOUR WRITEUP, DID YOU MEAN THAT !  WORKS ON ALL PATTERNS THAT
APPEAR AS THE LAST ELEMENT, BUT ONLY !* AND !(SUBPATTERN) WORK IN
THE INTERIOR? I THINK THIS IS WHAT YOU MEAN, I.E. != OR !== IS OK AS
THE LAST E.P.  ALTHOUGH YOU SAY ONLY !* AND !(SUBPATTERN) ARE
IMPLEMENTED.

16. I GUESS YOU KNOW THAT ($ X←!(PATTERN) $) DOESNT WORK.

18. ($1 Y←$3 $1) DOESNT WORK. I THINK THIS IS REALLY A CASE OF A
HIDDEN ! IN THE MIDDLE, BUT IT ISNT EXPLAINED IN THE WRITEUP, AND I
EITHER HAVE TO EXPLAIN IT OR ELSE IT HAS TO WORK.

19. ****WRONG ($1 'C Y←$1 $) DOESNT DO CDDR CHECK.

21. ($ ! 'A) SHOULD BE (EQ (CDR (LAST --)) NOT (AND (SETQ --) (EQ
--)) I WOULD LIKE TO SEE YOU TRY HARD TO AVOIDE UNNECESSARY PROGS
AND DUMMY VARIABLES.

23. ALSO INSTALLING AN (AND) AND (OR) + AND | I.E. ONE MIGHT SAY

 =X|=Y , =X(OR)=Y , ¬=X(AND)¬=Y , ETC.

I MENTION THESE BECAUSE IN LOOKING THROUGH MY LISTINGS FOR AN
EXAMPLE TO USE IN MY PAPER, I WAS MOST OFTEN FRUSTRATED BECAUSE WE
DID NOT HAVE ¬, &, OR |.

→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→WHAT DOES THIS MEAN?

4. CHECK AND SEE WHERE EXTRA SPACES MAKE A DIFFERENCE. IN PARTICULAR
($ = = X $) AND ($ == X $) ARE NOT EQUIVALENT. THIS SHOULD BE FIXED.


→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→DONE

5.  DONT QUOTE NUMBERS. EVEN IF DEFAULT IS FOR QUOTE OR ASSIGNMENT,
NUMBERS SHULD ALWAYS GO IN AS JUST NUMBERS.

11. X:($1 !X←$1 $2) DONT NEED THE EXTRA T, ALSO FOR X:($ !X←... $)
IN GENERAL, THERE ARE MAAY CASES WHERE YOU ALREADY KNOW THAT THE
RESULT OF THE SETQ IS NON NIL, SO YOU DONT HAVE TO PUT IN THAT T ATT
THE END.

20. USE NULL FOR NOT IN TRANSLATION WHEN WHAT IS MEAAT IS EQ NIL.
I.E. FOR ALL CASES IN THE CURENT CONFIGURATION..

22. THINK ABOUT INSTALLING A ¬ NOT PATTERN- I.E. TILDE, E.G. ¬=FOO,
¬&@NUMBERP, ETC.

→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→NOT GOING TO DO

17. ($1 'A $ 'B) GOES TO (AND (EQ --) (EQ (CAR (LAST (CDDR X)) 'B) I
THINK ON LAST'S, YOU MIGHT AS WELL JUST SAY (LAST X) AS (LAST (CDDR
X)) - I UNDERSTAND THAT IN THE CASE OF MEMBS IT MAKES A DIFFERENT,
E.G. ($1 'A $ 'B $),  YOU WOULD WANT TO SAY (MEMB 'B (CDDR X)) SINCE
THE FIRST ELEMENT MIGHT BE B.
PATTERN PROBLEMS:
ANOTHER PATTERN PROBLEM IS: THERE ARE
 TOO MANY EXTRA CHECKS WHEN A * IS GIVEN -- ALTHOUGH IT CANMATCHNIL,
 THE CHECK IS IMPLICITELY DONE AT THE END; THUS NO CHECK NEED BE DONE
 INTERNALLY.
   SOLUTION: CHANGED THE (* . &) OR (* . $) TO SOMEHTING ELSE WHICH
 CAN'T MATCH NIL, AND SO THAT THE WM IN (* . &) DOESN'T CALL THE
 LOWER MATCHWM WITH (& ...)
FROM MASINTER:
I'VE BEEN EXPERIENCING QUITE A FEW LITTLE GLITCHES WITH THE NEW


From: MASINTER Re:   RECORDS
- - - -
MAKE THE RPLAC THING DEPEND ON LOCAL DECLARATIO RATHER THAN
DECLARATION AT TIME OF RECORD CALL....

COMPOSE SHUD TAKE NAM←X, DO SPELLING CORRECTION, AND CHECK FOR IRRELAVANT NAMES....

POSSIBLY (RPLACFQ (FIELD X) VAL), (/RPLACFQ (FIELD X) VAL)
         (FRPLACFQ (FIELD X) VAL),,,
WITH (RPLACFQ ...) DEFINED?, DWIMIFIED WITH TRANSLATION HIDDEN?
TO THE APPROPRIATE THING.
(TAKES ANYTHING,NOT JUST FIELD NAMES....)


SUGGESTION... IF X IS A FIELD NAME ALREADY, AND A NEW RECORD IS
DECLARED WITH X DIFFERENT... THEN CHANGE X IN THE OLD RECORD
TO RECNAME.X....   THE TRANSLATION OF VAR:X WILL THEN DO
A LOOKUP ON VAR TO SEE IF IT HAS BEEN DECLARED TO BE OF ONE
OF THE RECORDS.....
-------
From: JACKSON
Re:   RECORDS
- - - -

LARRY,
 
IT LOOKS LIKE YOU DESCRIBE THE SAME KIND OF CAPABILITY FOR HANDLING
AND CREATING DATA TYPES, THOUGH I SHOULD ADMIT THAT I DON'T KNOW
VERY MUCH ABOUT THE SUBJECT..
 
PHIL
From: CARHART       Re:   CYCGEN (?)BUGS(?)
OK, LARRY, WATCH THIS...
@LISP
GOOD MORNING.
←SYSIN(<SRID↑FS$)
(<SRIDHARAN>STRGEN.SYS;33)
←EDITE((0))
EDIT
*(1(STRUCFORM NOFV-RINGS (3 2 0 0 0 2)))
*P
((STRUCFORM NOFV-RINGS &))
*1 DO
LEVEL 0, FORMS:1-11
*PP
  [STRUCFORM LIST (STRUCFORM ATTACHBIVALENTS ((0 . 9)
                              (3 . 1))
                             (STRUCFORM CATALOG
                                        (2 0 0 0 2)))
             (STRUCFORM ATTACHBIVALENTS ((0 . 8)
                         (1 . 1)
                         (2 . 1))
                        (STRUCFORM CATALOG (2 0 0 0 2)))
             (STRUCFORM ATTACHBIVALENTS ((0 . 7)
                         (1 . 3))
                        (STRUCFORM CATALOG (2 0 0 0 2)))
             (STRUCFORM ATTACHBIVS&LOOPS ((1 . 2))
                        (NIL [(((1 . 2)) . 1]
                             NIL
                             [(((NIL . 1)) . 1]
                             NIL NIL)
                        (STRUCFORM CATALOG (3 0 1 0 1)))
             (STRUCFORM ATTACHBIVS&LOOPS ((2 . 1))
                        (NIL [(((1 . 2)) . 1]
                             NIL
                             [(((NIL . 1)) . 1]
                             NIL NIL)
                        (STRUCFORM CATALOG (3 0 1 0 1)))
             (STRUCFORM ATTACHBIVS&LOOPS ((1 . 1))
                        (NIL [(((2 . 2)) . 1]
                             NIL
                             [(((NIL . 1)) . 1]
                             NIL NIL)
                        (STRUCFORM CATALOG (3 0 1 0 1)))
             (STRUCFORM ATTACHBIVS&LOOPS NIL (NIL [(((3 . 2)) . 1]
                                                  NIL
                                                  [(((NIL . 1)) . 1]
                                                  NIL NIL)
                        (STRUCFORM CATALOG (3 0 1 0 1)))
             (STRUCFORM ATTACHBIVS&LOOPS ((1 . 1))
                        (NIL [(((1 . 2)) . 2]
                             NIL
                             [(((NIL . 1)) . 2]
                             NIL NIL)
                        (STRUCFORM CATALOG (4 0 2)))
             (STRUCFORM ATTACHBIVS&LOOPS ((1 . 1))
                        (NIL NIL NIL NIL NIL NIL)
                        (STRUCFORM CATALOG (2 0 0 0 1)))
             (STRUCFORM ATTACHBIVS&LOOPS NIL
                        (NIL NIL NIL NIL NIL NIL)
                        (STRUCFORM CATALOG (2 0 0 0 1)))
             (STRUCFORM ATTACHBIVS&LOOPS NIL (NIL [(((1 . 2)) . 1]
                                                  NIL
                                                  [(((1 . 1)) . 1]
                                                  NIL NIL)
                        (STRUCFORM CATALOG (3 0 1]
*↑C
@;TWO THINGS.  1)ABOVE, THERE IS A CALL TO ATTBVS&
 LOOPS WITH ALL-NIL ARGS.  I DON'T GET THAT.  2)THERE ARE REFS
@;TO CATALOGS (3 0 1 0 1) AND (2 0 0 0 1), BOTH OF WHICH
@;CONTAIN AN ODD NUMBER OF ODD-VALENT NODES, SO THERE HAS TO BE A FV
@;AROUND SOMEWHERE.
FROM TEITELMAN RE: IN VALID
THE  IN  VALID  TRANSLATING AS IN (VALID X)
WAS A BUG IN THE CODE. IT SHOULD NEVER DO THIS
FOR IN/ON'S, TO'S, FROM'S, OR FOR, BIND, OR AS.
IT DOES MAKE SENSE FOR BY. E,G, FOR X IN Y BY CDDR. 

I WILL PROBABLY IMPLEMENT MOST OF YOUR SUGGESTIONS
IN THE MEMO.

THANX FOR TRACKING DOWN THE COMPILER PROBLEM.

WARREN
Date: 2-SEP-73  From: TEITELMAN Re: Various
1) PRINSTRUCTURE DOES CHECK CLISPHASHARRAY, DO YOU HAVE
ANY EVIDENCE TO THE CONTRARY?

2) NO TO STOP MACRO

3) PLEASE MAKE A VERSION OF THE FILE MBDNOTES IN WALKERS
DIRECOTRY THAT WILL COMPILE CORRECTLY. SAVE THE BUGGY VERSION
IN YOUR DIRECTORY FOR WHEN ALICE FIXES THE COMIPLER (TO CHECK IT OUT)
IF THE FIX REQUIRES CHANGING SOME LABELS OR REARRANGING A LITTLE BIT, DO
IT. TELL WALKER WHAT YOU DID AND MAKE SURE HE INCORPORATES THE CHANGES
BACK INTO HIS FILE.  THIS IS IMPORTANT AS PETER DOESN'T HAVE A VERSION
WHICH WORKS NOW.


3)IN LP (COND (& -- (GO LP)) ...
WOULD YOU HAVE BEEN SATISFIED IF
IT CLISPIFIED TO
LP (WHILE & DO --) -- ...)?

Date: 2-SEP-73  From: TEITELMAN

IN IF STATEMENTS, PRETTYPRINT ONLY PUTS THEM ON THE SAME LINE
IF (1) THE STATEMENTS CONTAIN NO SUBEXPRESSION, I.E. ARE LINEAR AND
   (2) IF IT DOES THINK THEY WILL FIT, I.E. AS SOON AS IT REACHES
       ONE THAT IT THINGS WILL NOT FIT, IT STARTS THE NEW LINE.

FOR EXAMPLE IN
  (IF &
    THEN (FOO A) (FOO1 B C D ) (FOO2 E F G) (FOO3 X Y)
         (FUM (ZIP X)
     	      (ZAP X]

NOTE THAT THE FITTING ALGORITHM MAKES SOME ASSUMPTIONS
ABOUT THE AVERAGE LENGTH OF ATOMS (IT DOESNT BLAST THEM APART)
AND IF YOU HAPPEN TO HAVE A FORM WITH LONG ATOMS IN
NEAR THE RIGHT HAND MARGIN THIS WILL FAIL. 

I CAN
 (A) MAKE THE AVERAGE LENGTH OF ATOMS CURRENTLY SET TO 5 BE A VARIABLE
AVAILABLE TO YOU
 (B) USE A MORE CONSERVATIVE ESTIMATE CLOSE TO THE RIGHT HAND MARGIN
 (C) PUT IN MORE THAN ONE SPACE BETWEEN STATEMENTS ON THE SAME LINE.


I MAY START SOUNDING SURLY SOON.
HERE IS THE SCOOP ON PRETTYPRINT. I SPENT ABOUT HALF AN HOUR
DIGGING INTO IT AND THERE ISN'T MUCH I CAN SEE TO DO
SHORT OF ABANDONING THE DISCIPLINE THAT SAYS
THAT IN CLISP SEGMENTS, I.E. BETWEEN CLISPWORDS,
IF A LIST ITSELF DOES NOT CAOUSE A CARRIAGE RETURN INTERNAL
DO NOT CARRIAGE RTURN AFTER IT.
IN YOUR FIRST CASE, WITH FOO,
SINCE VAR←, <'CDDDR VAR> AND I← ARE ALL ATOMS,
THEY ARE PRINTED ON THE SAME LINE. YOU WOULDNT WANT THEM IN
COLUMNS. AFTER AN ATOM ENDING IN A CLISP OPERATOR,
PRETTYPRINT NEVER SPACES, SO THERE IS NO PLACE IN THAT FUNCTION
THAT IS EFFECTED BY THE DECISION TO TREAT LINEAR LISTS
AS ATOMS. FURTHERMORE, EXPECTING PRETTYPRINT
TO KNOW THAT AFTER VAR>   THE END OF A
"CLUSTER" WAS REACHED, REQUIRES IT TO HAVE ALL THE INFORMATION
THAT DWIMIFY HAS, AND MORE.

IN FIE, THE SITUATION IS A LITTLE MORE SUSCEPTIBLE
TO ANALYSIS, AND MAYBE YOU'LL SUGGEST SOMETHING.
PRETTYPRINT PROCEEDS BY FIRST ASKING WHETHER THE
EACH LIST CAN FIT BEFORE DECIDING WHETHER TO START A
NEW LINE.
IN FIE, THE PROBLEM IS THAT A VERY LONG STRING APPEARS AT THE RIGHT
MARGIN. IF THIS WERE A NORMAL ATOM, NO PROBLEMS
WOULD OCCUR, SINCE THERE IS ROOM FOR SEVEN CHARACTERS.

THE PROBLEM GOES AWAY WHEN I INSTALLED THE SPACE TWO
CHARACTERS BETWEEN LISTS, SINCE THEN THERE IS ONLY ROOM FOR
THREE CHARACTERS, AND THE FITP ALGORITHM DETECTS THIS.
ANYWAY, I GUESS STRINGS OCCUR SUFFICIENTLY RARELY, AND
THEIR STATISTICS ARE SUFFICIENTLY SCREWED UP THAT
THEY DESERVE A MORE ACCURATE ACCOUNTING, SO I MADE FITP
ACTUALLY DO AN NCHARS WHEN IT ENCOUNTERS A STRING, AND
IN THIS CASE, IT WILL PRINT EVERYTHING ON THE SAME LINE
IF IT FITS, AND IN YOUR CASE, PRINT A CARRIAGE RETURN
BEFORE THE (PRINT ...)
BEFORE WE CLOSE THIS SUBJECT, YOUR COMMENT
BREVITY IS NICE, LEGIBILITY IS IMPORTANT, LEADS ME TO BELIEVE
THAT YOU THINK THIS "JUST HAPPENED" I.E. THE PRINTING
OF IFS AND THENS THIS WAY. NOT ONLY DID IT TAKE A FAIR
AMOUNT OF THINKING ABUT AND EXPERIMENTING TO DECIDE WHAT
 LOOKED NICE (PLUS CONSULTING MANY OTHERS ON THEIR OPINION)
BUT AN AWFUL LOT OF HACKING WITH SOME VERRY MESSY CODE.
I HAVE PROBABY SPENT IN THE VICINITY OF 50 HOURS ON
PRETTYPRINT TO MAKE IT WORK ON CLISP  THE WAY
IT DOES. CONSTRUCTIVE SUGGESTIONS ARE WELCOME.


Date: 2-SEP-73  From: TEITELMAN 
REMOVING PARENTHESES IN IF ANTECEDENTS IN PROGS.
FIXED.
ALSO, YOUR VARIOUS EXAMPLES ALSO SUGGESTS
THAT IF THE USER IS EDTING THE EXPRESSION
(ITIMES A B) AND REPLACES A WITH X+Y IT WILL
NOT CLISPIFY CORRECTLY. GUESS I HAVE TO DWIMIFY
WHENEVER I SEE AN ATOM WITH FUNNY CHARS IN IT
WHEN THE EXPRESSION IS TO BE CONVERTED TO INFIX OPERATORS.

(I THOUGHT I WAS DONE LAST NIGHT)

Date: 2-SEP-73  From: TEITELMAN 
DO YOU REALLY THINK THAT PEOPLE WILL WANT
TO SEE (OR WORSE BE ASKED) MESSAGES ABOUT SUCH CORRECTIONS,
E.G. FOR X IN Y BY CDDR DO ... AND HAVE
DWIM SAY CDDR -> (CDDR X)?


I UNDERSTAND AND AGREE WITH THE ESSENCE OF YOUR ARGUMENT
ABOUT TRANSFORMATIONS THAT ARE AFFECTED BY CONTEXT AS
REQUIRING INTERACTIONS, BUT AM NOT SURE WHAT TO DO IN
THIS CASE. I PERSONALLY FROWN VERY STRONGLY ON USING
THE SAME NAME FOR BOTH FUNCTIONS AND VARIABLES, AND
***TAKE NOTE*** THE PROBLEM WILL GET WORSE WHEN
WE START HAVING MORE SOPHISTICATED CORRECTIONS, I.E.
IF ONE IS TRYING TO WRITE A SYSTEM TO DISAMBIGUATE
AND THE USER IS INSERTING A LOT OF AMBIGUITY ....

WOULD YOU AGREE THAT IF THE 'FN' IN QUESTION WERE
LIKE CDR, OR ATOM, OR NUMBERP (AS OPPOSED TO VALID
WHICH YOU DEFINED), THAT THE CORRECTION SHOULD
BE DONE AUTOMATICALLY, AND SHOULD THE USER BE  INFORMED?

CALL ME WHEN U GET A CHANCE AS I  WANT TO DISCUSS
THE CLISPIFY PROBLEM WITH YOU ALSO.

Date: 2-SEP-73  From: TEITELMAN  Re: SURRENDER

OK. I PUT IN THE #$'&$#@*> (THAT'S NOT DLS GARBAGE)
THING FOR MESSAGES ON USE OF FUNCTION NAME
AS A FORM.
Date: 2-SEP-73  From: TEITELMAN  Re: I.S.OPR
I DON'T LIKE THE SYNTAX FOR THEN OR THEREIS. HOWEVER,
I HAVE INSTALLED A FEATURE WHICH LETS YOU DEFINE
NEW I.S.TYPES SUCH AS SUM PRODUCT ETC., OR
EVEN CHANGE COLLECT. THERE IS A FUNCTION CALLED
I.S.OPR WHICH TAKES FOUR ARGUMENTS: NAME,
FORM, INIT, AND VAL.
FORM IS THE THING TO BE DONE EACH TIME. * STANDS
FOR THE ARGUMENT TO THE OPERATOR, AND $$VAL INDICATES
THE VALUE, E.G. FOR
RCOLLECT, FORM WOULD BE (CONS * $$VAL), FOR
COLLECT AS IT NOW STANDS (NCONC1 $$VAL *).
INIT IS OPTIONAL AND IS AN INITIALIZING FORM, E.G.
FOR SUM, INIT WOULD BE 0, FOR PRODUCT IT WOULD BE 1.
VAL IS ALSO OPTIONAL AND SPECIFIES A RETURN VALUE.
IF NIL, (RETURN $$VAL) IS SUPPLIED. HOWEVER,
YOU MIGHT DEFINE COLLECT AS
I.S.OPR(COLLECT (CONS * $$VAL) NIL (DREVERSE $$VAL))

I.S.OPR DOES ALL THE STUFF TO THE PROPERTY LISTS,
AS WELL AS ADDING THINGS TO SPELLING LISTS ETC.
IT ALSO HANDLES THE LOWER CASE VERSION.
IT IS UNDOABLE.
I'M SURE YOU'LL GO BATSHIT.
I'LL LET YOU KNOW AS SOON AS I LOAD UP.
Date:  4-SEP-73  404 From: TEITELMAN
- - - -
THE NEW LISP HAS EVERYTHING FIXED EXCEPT FOR THE
COMPILER BUG, AND PARTIALLY CLISPIFIED EXPRESSIONS
CONTAIING ANGLE BRACKETS (BECAUSE OF JACKSONS CODE).
ALL OF YOUR PROBLEMS AND THE SUGGESTIONS I RESPONDED TO
YOU ABOUT IT ARE IMLEMENTED. CLISPIFY SHOULD WORK
ON ALL PARTIALLY CLISPIFIED EXPRESSIONS.
TRY TO BREAKIT AND LET ME KNOW HOW IT GOES.

WARREN
Date:  5-SEP-73 1950-PDT From: SRIDHARAN Re:   LABELLING PAPER
- - - -
I HEARD FROM DENNIS SMITH THAT YOU WERE STILL WORKING ON THE
LABELLING PAPER.  THE CYCGEN PAPER IS READY AND WE ARE MAKING THE
COPIES NEEDED TO MAIL THEM OUT. COULD YOU GIVE ME A REALISTIC
ESTIMATE OF WHEN YOU EXPECT TO HAVE THE SECOND PAPER DONE?  THANKS
MUCH. PLEASE ENLIGHTEN ME ON WHAT YOUR SCHEDULE IS AND WHAT YOUR
PLANS ARE FOR COMING FEW WEEKS.
Date:  5-SEP-73 1955-PDT  From: SRIDHARAN  Re:   NEW FILES
- - - -
THERE IS A NEW STRGEN.SYS;34 UNDER MY DIRECTORY.
RAY CARHART DISCOVERED A BUG IN THE LABELLER REMPERMS WAS BEING COMPUTED
WRONGLY.  I HAVE TRACED THE PROBLEM TO INCORRECT MAINTENANCE OF 
EDGE ORDERINGS AND NODE ORDERING.  THE ROUTINE CHECK SEEMS TO DEPEND 
CRITICALLY ON THESE ORDERINGS.  I HAVE FIXED TWO FUNCTIONS
LABELM -- WHEREIN I INDUCE A FORCED ORDERING OF THE CTENTRIES
IN ASCENDING ORDER OF NODENUMBERS; AND CLASSIFY3 -- ENSURING THAT THIS 
FUNCTION DOES NOT KILL THE ORDER IN CLASSIFYING.
GENLISP FILE HAS THE FUNCTION DIFF. THERE AGAIN AN XLIST WAS CHANGED
TO LIST.
BYE
Date: 30-AUG-73 2354 From: TEITELMAN Re:   MEMO
I HAVE BEEN PROCESSING YOUR EMO. HERE ARE THE VERDICTS:
(re LISP-MISC.MEMO)
(1) I IMPLEMENTED THE SUBPAIR CHANGE, AND ASSUMING BBN DOESNT
SQUAWK TOO LOUDLY IT WILL GO THROUGH. CHECK IT OUT IN NEXT LOAUP.

(2) NO ON TAILP.  THE VALUE OF
TAILP IS THE TAIL, SO RETURNING T WHEN GIVEN NIL AS ITS FIRST
AAGUMENT IS DANGEROUS, AND MAY INFFACT DISRUPT SOME
PROGRAMS THAT ALREADY UTILIZE THIS FACT AND THUS DONT
DO (AND X (TAALP X Y)) CHECKS. SUGGEST YOU WRITE YOUR
OWN VERSON, CALL IT TAILPRED, AND ALWAYS HAVE IT RETURN
T OR NIL.

(3) FIXED THE NTH PROBLEM,  NTH((A . B) 2) = B, NTH((A .  ) 3) = NIL.

(4) LET ME WAIT ON ANSWERING THIS FOR A WHILE.
(I DIDNT UNDERSTAND IT COMPLETELY)

(5) DONT AGREE WITH  CONC AND LCONC, SINCE THAT COSTS ANOTHER CONS,
AND ON SHORT LISTS, THIS IS MORE THAN THE COST OF CDRING
DOWN. I WOULD CONSIDER ADDING A TCOLLECT OR SOME SUCH THING.

(6) POSTPONE THIS. I LOOKED AT IT ONCE AND IT SEEMED HARD.
LETS TALK ABOUT IT.

(7) OK. EXCEPT THAT THAT WAY IT DOESNT GET ON THE HISTORY LIST.

(8) I FORWARDED THIS COMPLAINT TO BBN.

(9) I FIXED THIS.

(10) SORRY NO CAN DO. R AND RC ONLY WORK WITHIN
THE CURRENT EXPRESSION, THEY DONT DO UPS OR ANY SUCH THING.
SO THEY CANT WORK.  I COULD DO A SPECIAL
CHECK TO AVOID DOING THE CHAACTER RECOGNITION
THING FIRST, BUT SEEMS FRIVOULOUS..

WARREN
From: BRYANT at BBN-TENEX
Re:    HELP

COULD YOU GIVE ME THE DETAILS ON HOW I CAN USE YOUR
PRINTOUT ROUTINE AT AI LAB?  THAT IS, IF YOU DON'T MIND MY USING IT
ONCE A WEEK OR ONCE EVERY OTHER WEEK. THE QUESTIONS ARE:
  1.  TO WHAT FILE DO I SHIP MY FILES FROM BBN TO AI LAB.  I THINK I HAVE
       AN ACCOUNT THERE BUT AM NOT SURE.
  2.  ONCE THE FILE IS THERE, THEN WHAT DO I DO?


HAVE BEEN USING CLISP AND I REALLY LIKE IT.  THANX.

                                         PENNY
-------
From: BRYANT at BBN-TENEX
Re:   LISTING FILES AT AI LAB
- - - -
THANKS FOR THE INSTRUCTION - YOUR'RE REALLY GREAT.  I'LL TRY IT TODAY.
-------
Date: 4-SEP-73 2015 From: TEITELMAN Re: SYSTEM DATE cc: LISP USERS
- - - -

THE VALUE OF THE VARIABLE MAKESYSDATE WILL BE
THE DATE THE SYSTEM MADE. THIS SHULD AID IN
TRACKING DOWN WHICH SYSTEM YOUR SYSOUT WAS MADE FROM.

WARREN
-------
Date:  4-SEP-73 2016 From: TEITELMAN cc:   LAMPSON
- - - -
I REMEMBERED WHY I WANTED TO PRINT SMALL LISTS ON
THE SAME LINE: FOR THINGS LIKE
(IF (FOO X) AND (FIE Y) MEMB Z  ...

HOWEVER I THINK I CAN DISTINGUISH THESES CASES
FROM THE TROUBLESOME ONES.

WARREN
-------
Date:  5-SEP-73 1147 From: TEITELMAN Re:NEW LISP,CHANGES IN I.S.cc:   LISP USERS

THERE IS ANOTHER NEW LISP. THE PRETTYPRINT ALGORITHM
FOR CLISP HAS BEEN CHAGED SLIGHTLY. ALSO THERE
HAVE BEEN SOME NEW ITERATIVE STATEMENT OPERATORS,
ALWAYS, NEVER, AND THEREIS, PLUS SOME CHANGES TO
THE FUNCTION I.S.OPR DESCRIBED IN THE MEMO
<LISP>LISP.MEMO.

WARREN
-------
Date: 10-SEP-73 2340 From: TEITELMAN
Re:   LARRY,
WHY DIDNT YOU TELL ME ABOUT CLISPIFY ((PLUS 11 2 X)) 
GOING TO 11+2+X EARLIER? THATS A  BUG WHICH
MUST HAVE BEEN INTRODUCED RECENTLY, BECAUSE
I AM SURE THAT USED TO WORK CORRECTLY. 
IT CERTAINLY WAS NOT INTENDED TO DO THAT.

WARREN
Date: 11-SEP-73  056  From: TEITELMAN Re:   VARIOUS
- - - -
ALICE IS LOOKING AT COMPILER PROBLEMS.
THE THING WITH ARG AND LAMBADA ATOM CERTAILY SHOULD WORK.
THIS WILL BE FIXED. AS FAR AS FUNCTION LAMBDA IN A BLOCK IS
CONCERNED,  CURRENTLY THIS IS NOT
TREATED AS PART OF THE BLOCK (NOR IS THERE ANYTHING IN
THE MANUAL TO LEAD YOU TO HIS BELIEF), HENCE IT
 IS COPILED AS A SEPARATE EXTERNAL FUNCTION. ALICE
IS LOOKING AT IT AND MAY CHANGE IT AS PE YOUR SUGGESTION,
EXCEPT I DONT AGREE THAT THE F/L SHOULD BE ADDED TO ENTRIES -
PASSING IT BACK OUT OF THE BLOCK SEEMS LIKE A BAD IIEA.
BUT MAYBE SHE WILL FIX IT.

MORE TO COME.
Date: 11-SEP-73  103 From: TEITELMAN
- - - -
(1) CAANOT GLOM COLLECT FOO -> COLLECT (FOO *IT*))  INTO CODE.
I AM SURE YOU WOULDNT WANT TO SEE $$TEMS AND $$TEM1'S IN YOUR CLISP,

(2) I DONT LIKE THE IDEA THAT IT WOLD BE HANDLED DIRFFERENTLY
IN THE CASE OF DO THAN IN COLLECT FOR EXAMPLE (AND NEITHER
WOULD YOU IF YOU THOUGHT AOUT IT), E.G.
FOR X IN L BY (FOO) COLLECT PRINT  WHERE  FOO SETS THE FREE VARIALBE
PRINT.  
I HAVE NO WAY OF DISTINGUISHING BETWEEN SYSTEM FUNCTIONS
AND USER COMPILED FUNCTIONS, AND I AM SURE THAT
WEREE I MTO MAKE THIS DISTINCTION, YOU WOULD NOT LIKE
IT EITHER.  I AM MORE NCLINED TO THINK THAT
WHEN IT IS THE NAME OF A FUNCTION AND NOT THE NAME OF A VARIABLE
I MAKE THE TRANSFORMATION WITHOUT BOTHERING YOU, PERIOD.
I THINK THAT YOU ARE THE ONLY PERSON THAT HAS EVER
ENCOUNTERED ANY PROBLEMS, AND YOUHAD TO STRAIN TO
CONSTRUCT A SITUATION WHERE IT FAILED, AND FURTHERMORE,
IT DEPENDEND ON THE VERY POOR PRACTICE OF HAVING THE SAME
NAME FOR FUNCTION AS FOR A VARIABE. IF I SET UP DWIM SO
THAT IT NEVER TOOK ANY CHANCES, IT WOULDNT BE VERY HELPFUL.
THE WHOLE THING IS PROBABILISTIC ANYWAY.

I AM GETTING THE IMPRESSION THAT YOU HAVE NOT THOUGHT
VERY MUCH ABOUT THIS PARTICULAR SITUATION, SINCE YOU
ARE VACILLATING BACK AND FORTH. LETS TALK ABOUT IT.

WARREN
-------
Date: 11-SEP-73  209 From: TEITELMAN
- - - -

YOUR CLISPIFY (PLUS 10 2) THING IS A RESULT OF A GLITCH
SEVERAL MOONS AGO. AT ONE TIME, CLISPIFY WAS DUMPED
OUT WITH THE DECLARATION FOR MIXED ARITHMETIC. AS
A RESULT, PLUS, TIMES, ETC. ALL MISTAKENLY HAVE
THE PROPERTY CLISPINFIX ON THERE PROPERTY LISTS.
YOU CANFIX THIS BY SIMPLY REMROPING IT, OR ELSE WAIT
TILL NEW SYSTEM.

WARREN
Date: 11-SEP-73  251 From: TEITELMAN

LARRY,

ALICE REPORTS THAT BLOCKCOMPILING CALL TO LAMBDA ATOM HAS BEEN FIXED.
SO PLEASE MAKE A NOTE THAT WHEN NEW SYSTEM COMES UP,
CHECK OUT THE PROBLEM YOU REPORTED TO ME, I FORGET
WHICH OF YOUR TWO FILES IT WAS IN. THIS
WAY I CAN FORGET ABOUT IT.

WARREN
Date: 11-SEP-73  308 From: TEITELMAN Re:   STRPOSL
- - - -

STRPOSL OPERATES MUCH MUCH FASTER IF YOU GIVE IT
A PREPARED BITTABLE. TAKE YOUR CAALS TO STRPOSL IN
MATCHBLOCK AND REPLACE THE LIST BY AN ARRAY
OBTAIED FROM CALLING FUNCTION MAKEBITTABLE ON THAT LIST.
SEE ME FOR MORE INFO.

WARREN
Date: 11-SEP-73  150 From: TEITELMAN 
- - - -
LARRY,

IN ORDER TO MAKE PRSTRUC WORK CORRECTLY ON PATTERNS,
I MUST DO A GETHASH ON EACH LIST FOR WHICH CAR IS
NOT THE NAME OF A FUNCTION. JUST THOUGHT
YOUD LIKE TO KNOW.

WARREN
Date: 12-SEP-73  354 From: TEITELMAN
- - - -
LARRY,

THERE IS A NEW LISP ON MY DIRECOTRY CAALED LISPX.SAV

FOR THE TIME BEING, THE
PAATIAL CLISIFICATION PROBLEM IS AVIDED BY RETURNING TO
THE OLD STATE. ALL OF THE PROBLEMS YOU REPORTED TO ME
THAT AFFECT MY TUFF HAVE BEEN FIXED. IN ADDITION, YOUR
BLOCK COMPILING PROBLEM WITH THE ARG HAS BEEN FIXED
(BUT YOU SHOULD CHECK IT OUT). THE FUNCTON LAMBDA PROBLEM
HAS NOT YET BEEN FIXED.

******DO NOT PUT COMMENTS INSIDE OF CONS OR NCONC******
COMMENTS SHOULD ONLY BE PUT WHERE THEY ARE SAFE. 
IT IS QITE OSSIBLE THAT COMPILATION OF CONS AND NCONC
WILL BE CHAGED OUT FROM UNDER YOU. THIS IS VERY
POOR PRACTICE ON YOUR PART.

WARREN
Date: 12-SEP-73  518 From: TEITELMAN

WORKING MY WAY THRU YOUR VARIOUS GOODIES.

ANYWAY IN ONE  XAMPLE YOU STATE
(FOR X IN (--) WHEN X }FMEMB LAST-PRINTSTRUCTURE:1 DO
(PRINT X)) FAILS.
I FOUND A FEW PROBLEMS WITH THAT. HOWEVER,
YOU DO KNOW THAT LAST-PRINTSTRUCTURE:1 WILL ALWAYS BE TREATED
AS (IDIFFERENCE LAST (CAR PRINTSTRUCTURE)), I.E.
IT EITHER BREAKS IT APART OR IT DOESNT, NOTHING HALFWAY.
YOU SHULD HAVE WRITTEN LAST-PRINTSTRUCTURE :1.

WARREN
Date: 12-SEP-73 1719-EDT From: BRYANT at BBN-TENEX Re:SOME NOTES ON <NEWLISP>LISP AT BBN
FOLLOWING ARE SOME THINGS WHICH I NOTICE AND FIND ANNOYING:
   1.  FILES CREATED IN <NEWLISP> CANNOT BE READ FROM REGULAR LISP.  THIS
       MEANS THAT IF THE FILES ARE  SENT TO SITES WITH NO <NEWLISP> I 
       CAN'T EVEN GET ON FIRST BASE.
   2.  IF I USE 'CL' COMMAND IN THE EDIT I OCCASIONALLY GET BACK ON
       'COND' THENELSE WITH NO PACE BETWEEN 'THEN' AND 'ELSE'. 

       SO WHEN I INTERPRET THE CL'ED FUNCTIONS I GET ERRROR.  THERE
      WAS ONE CASE IN WHICH A PAIR OF PARENTHESIS WAS MISSING
        THEREBY PUTTING THE EXPRESSION ON A WRONG LEVEL - BUT I CAN'T
        SEEM TO RECONSTRUCT THIS PROBLEM.
   3.  I DID THE FOLLOWING*
         (FP-RULES ← '(((EQUAL A B..............)
       WHICH PROMTED WITH A MESSAGE
          ≠≠(IN RULES) TREATED AS CLISP     U.B.A.    FP
        THE EXPRESSION WAS THEN CHANGED TO
         ≠(IDIFFERENCE FP (SETQQ RULES (((EQAUL A B.........)
        THAT DWIM INTERPRETATION STINKS, BECAUSE IT'S PRETTY OBVIOUS
        WHAT I MEAN.  OF COURSE IF I DO (SETQ FP-RULES....) IT WORKS.


HOPE MY COMMENTS ARE OF USE.  I TRY AVOIDING THESE TRAPS BUT IT
WOULD BE NICE IF THEY WEREN'T TRAPS AT ALL.   ALSO, NOTE THAT
THE SECOND ERROR IS BAD SINCE I CAN'T USE  CL TO MAKE
A NICE LISTING, WHICH IS WHAT I WANT TO USE  CLISP FOR.
Date: 12-SEP-73  518 From: TEITELMAN Re: WORKING MY WAY THRU YOUR VARIOUS GOODIES.

ANYWAY IN ONE  XAMPLE YOU STATE
(FOR X IN (--) WHEN X }FMEMB LAST-PRINTSTRUCTURE:1 DO
(PRINT X)) FAILS.
I FOUND A FEW PROBLEMS WITH THAT. HOWEVER,
YOU DO KNOW THAT LAST-PRINTSTRUCTURE:1 WILL ALWAYS BE TREATED
AS (IDIFFERENCE LAST (CAR PRINTSTRUCTURE)), I.E.
IT EITHER BREAKS IT APART OR IT DOESNT, NOTHING HALFWAY.
YOU SHULD HAVE WRITTEN LAST-PRINTSTRUCTURE :1.

WARREN
Date: 13-SEP-73 1609 From: TEITELMAN Re:   PRSTRUC
LARRY,

IT WAS A SIMPLE SILLY PROBLEM AND IS NOW FIXED.
ALSO 
I ISNTALLED A VARIABLED CALLED INVISIBLEVARS WHICH
IS INITIALIZED TO THINGS LIKE ($$TEM $$VAL  ETC.)
I.E. THINGS NOT TO APPEAR ON VARS. IF YOU WANT TO
ADD SOME OF YOUR STUFF THERE, YOU CAN DO IT IN MATCH - INITIALLY,
AND THEN TELL ME WHAT TO PUT IN AND I WILL
DO IT IN PRSTRUC. NO MAYBE, SINCE MATCH IS LOADED
SEPARATELY, PUT ON YOUR VARS
AN ADDVARS INVISIBLEVARS  WITH THE APPROPRIATE NAMES.

WARREN
(response to:)
I DUNNO WHAT YOU DID, BUT...

YOU MUST HAVE PUT THE WRONG THING AROUND THAT GETHASH ON THE NEW
PRINTSTRUCTURE, CAUSE IT NOW, I BELIEVE, PUTS THE WHOLE THING
ONTO TREELIST, CAUSING WRETCHED THINGS TO HAPPEN TO THE HIDDEN CODE,
THE PRINTSTRUCTURE PRINTOUT, AND INCIDENTALLY, THE END PART OF
OF THE CLISP: 'D CODE WHICH WAS NOT COPIED...
I.E.
DEFINE(((TEST(X)(FOR I FROM 1 TO X DO (FOO I))
]

and after dwimifying...

PRINTSTRUCTURE(TEST)

TEST   PROG
	$$VAL
	SETQ	I
... ETC... AND, THEREAFTER, EVERY FOR IS TRANSLATED WITH AN EXTRA
(FOO) AT THE END...

Date: 13-SEP-73 1609 From: TEITELMAN
- - - -
NEW PRSTRUC IS ON PRSTRUC.COM ON MY DIRECTORY IF YOU WANT TO TRY IT
BEFORE THE NEXT LOADUP.

WARREN
-------
Date: 13-SEP-73 1652 From: TEITELMAN Re:   FGETD

THAT IS A FEATURE! GETD DOES A CONS FOR EACH CALL ON
A SUBR. FGETD WAS INTENDED TO BE A QUICK CHECK
TO SEE IF A FUNCTION HAD A DEFINITION. 

WARREN
-------
(response to:)
THE VALUE RETURNED BY THE FUNCTION FGETD AND THE MACRO EXPANSION
OF FGETD ARE DIFFERENT FOR SUBRS!!! (FGETD RETURNS (0 . 915) WHILE
THE COMPILATION OF
(TEST (LAMBDA(X)(FGETD X]   ... RETURNS JUST 915.

			LARRY

(counter response)
IT'S OK IF FGETD RETURNS DIFFERENTLY FROM GETD ON SUBRS, AS LONG
AS AN INTERPRETED (FGETD X) AND A COMPILED (FGETD X) RETURN
THE SAME VALUE... (OR THAT THE FORMER CAUSES AN ERROR)...

				LARRY
Date: 13-SEP-73 1806 From: TEITELMAN Re:   NEW FEATURES IN ITERATIVE STATEMENTS
cc:   DEUTSCH, KAPLAN, LAMPSON, MCCREIGHT
- - - -


I HAVE INSTALLED SYNONYMS IN ITERATIVE STATEMENTS.
IF I.S.OPR IS CALLED WITH SECOND ARGUMENT ATOMIC,
IT MAKES FIRST BE SYNONYMOUS WITH SECOND.
IN THIS CASE, THE ARGUMENT CAN BE ANY OF THE
ALREADY EXISTING I.S. OPERATIVES. E.G.
BY PERFORMING I.S.OPR(FIND FOR)  AND
I.S.OPR(SUCHTHAT THEREIS)
ONE CAN WRITE:
FIND X FROM 1 TO 10 SUCHTHAT X↑2=25
AND GET BACK 5 AS THE VALUE.

CURRENT SYNONYMS ARE:  WHERE FOR WHEN,
FIND FOR FOR, SUCHTHAT FOR THEREIS, AND ISTHERE FOR THEREIS,
E.G.
ISTHERE NUMBERP IN X   WILL
RETURN NIL OR THE NUMBER.

ALSO, I HAVE USED THIS FEATURE TO ELIMINATE THE
CHECKING FOR BOTH UPPERCASE AND LOWERCASE IN DWIMIFYING,
I.E. for IS ESSENTIALLY TREATED AS A SYNONYM FOR FOR.

WARREN
FROM MASINTER, RE RECORDS
THERE ARE A FEW ERROR SITUATIONS WHERE I CURRENTLY CALL
ERROR WITH RECCOMPOSE0, BUT WOULD RATHER ERROR IN SUCH A WAY THAT
DWIMIFICATION ABORTS:

(CREATE FOO ...) WHERE FOO CAN'T SPELLING CORRECT TO A RECORD NAME

(CREATE FOO   FIE←... ) WHERE FIE CAN'T SPELLING CORRECT TO THE NAME
OF A FIELD OF FOO

(CREATE FOO  ...   ) WHERE ... IS NOT OF THE FORM FIELD←VALUE ...

IF I JUST ERROR, DWIM GOES ON TO GIVE (POSSIBLE PARENTHESIS ERROR)'S..

WOULD YOU LET ME KNOW HOW YOU WANT ME TO HANDLE THESE?
(I.E., SHOULD I USE CLISPERROR, AND/OR COULD YOU SET UP SOME ERROR
NUMBERS FOR ME, OR HOW I CAN SET THEM UP?).

			THANKS

			LARRY
--------------------
THE FILEDEF PROPERTY IS CORRECTLY ON RECCOMPOSE0, BUT MISSING FROM
RECORD AND TYPERECORD.... AS FOR YOUR PREVIOUS MESSAGE WRT THE RECORDWORD
FOR RECCOMPOSE0, ETC, RECORD AND TYPERECORD ARE TOP-LEVEL FUNCTIONS,
(NLAMBDA'S EVEN), LIKE DEFINEQ... AND SHOULDN'T BE LOWERCASED...

COULD YOU PUT FILEDEF RECORD.COM ONTO RECORD AND TYPERECORD, PLEASE?

THANKS.....

			LARRY
Date: 14-SEP-73  215 From: TEITELMAN

I DIDNT FULLY UNDERTAND YOUR MESSAGE ABOUT RECORDS.
LETS TALK SOME.

WARREN
Date: 14-SEP-73  453 From: TEITELMAN Re:   NEW LISP
cc:   LAMPSON, JACKSON

THERE IS A NEW LISP ON MY DIRECTORY UNDER LISPY.SAV
THIS LISP PURPORTS TO HAVE ALL OF THE PROBLEMS FIXED, THOUGH
I WANT TO DO A LITTLE BIT OF TUNING AND TIMING. PARTIAL CLISPIFICATION
IS HANDLED CORRECTLY IN ALL CASES, PLUS THE NEW FEATURES ADVERTISED
FOR ITERATIVE STATEMENTS, PLUS ALL OTHER PROBLEMS THAT HAVE BEEN REPORTED
ARE FIXED. BANG AWAY AND REPORT ANY PROBLEMS A.S.A.P.

WARREN
Date: 14-SEP-73 1545 From: TEITELMAN
LARRY

I WOULD PREFER THAT YOU TRY TO  AT LEAST
MAKE AN APPEARANCE IN THE AFTERNOONS, AT LEAST
A LITTLE MORE OFTEN THAN OVER THE
LAST COUPLE OF WEEKS. I WANTED TO TALK TO
YOU ABOUT  ECORDS AND STUFF SO THAT
MAYBE IT COULD GET IN THE SYSTEM THIS WEEKEND,
BUT IT DOESNT LOOK LIKE THATS GOING TO HAPPEN NOW.

WARREN
Date: 15-SEP-73 1657 From: TEITELMAN 

TO GIVE YOU AN IDEA OF THE AMOUNT OF HAIR IN THE SYSTEM -
YOUR RPLACA OR EXAMPLE ONLY FAILED FOR THOSE SPCIFIC CASES
BECAUSE OF THE FOLLOWING-
WHEN TRYING TO DECIDE WHETHE OR NOT TO REMOVE PARENTHESES,
CLISPIFY ASKS -IS THERE AN OPERAND ON THE LEFT AND WILL
THE INNER OPERAND STOP THE SCAN ON DWIMIFYING,
E.G. (ITIMES A (IPLUS B C)) MUST GO TO A*(B+C).
AND ALSO IS THERE AN OPERAND ON THE RIGHT AND WILL
ITS OPERATOR STOP THE SCAN FOR THE INNER ONE
E.G. (ITIMES (IPLUS A B) C). HOWEVER
SOME OPERATORS WORK DIRFFERENTLY ON LEFT THAN RIGHT,
I.E. (IPLUS (SETQ X Y) Z) MUST GO TO (X←Y)+Z
WHEREAS (IPLUS X (SETQ Y Z)) GOES TO X←Y+Z.
SIMILAL (IQUOTIENT (IQUOTIENT A B) C) GOES TO
A/B/C  BUT (IQUOTIENT A(IQQOTIENT B C)) GOES
TO A/(B/C). ANYWAY, FOR PRLACA, IT WAS CLISPIFYING
CDDR OF THE FORM I.E. THE OR BUT IT DIDNT INDICATE
THAT THERE WAS ALREADY A LEFT HAND OPERATOR, SO IT
DIDNT BOTHER TO CHECK OR AGAINST ←. 
I FIXED THIS.

(JUST THOUHT YOUD LIKE TO KNOW THAT YOUR PATTERN COMPILER
ISNT THE ONLY "MESSY" THING  AROUND).
AND THAT MESSY DOES NOT NECESSARILY = BAD, IT JUST
MEANS A LOT OF CARE WAS TAKEN FOR SPECIAL  CASES.

WARREN
Date: 15-SEP-73 1715 From: TEITELMAN Re:   LOWERCASING

TO MAKE CREATE LOWERCASE, PUT ON
ITS PROPERTY LIST UNDER PROPERTY CLISPWORD
THE PROPERTY (NIL . create). similarly for anything else. 
THIS SHOULD NOT (HOPEFULLY) HAVE ANY ADVERSE EFFECTS
ANYWHERE. IF IT DOES, LET ME KNOW. (I HAVE LOOKED
AROUND AND SEEN HOW GENERAL I HANDLE THE CLISPWORD
PROPERTY AND I THINK I HAVE BEEN CAREFUL.
DONT PUT (FORWORD . create) or IFWORD
 AS THIS WILL CAUSE DWIIFY TO ATTEMPT TO INTERPRET
THEM IN THATFASHION.

WARREN
Date: 15-SEP-73 1729 From: TEITELMAN 
LARRY

PUT ON THE PROPERTY LIST OF  RECORD AND TYPERECORD
UNDER THE PROPERTY CLISPWORD
A PROPERTY OF THE FORM (RECORDWORD --)
I SUGGEST THAT YOU ALSO PUT ON THE PRORTY
OF CREATE AND create A PROPERTY OF THE FORM
(RECORDWORD . create)  IN AAL CASES, I WILL THEN
CALL RECCOMPOSE0  GIVING IT FAULTX
AS AN ARGUMENT (SO THATYOU CAN TELL WHETHER ITS RECORD,
TYPEREOCRD OR CREATE.) YOU CAN ADD NWE WORDS
IN THIS WAY AND DWIM WILL CALL YOU. 
ALSO LOWERCASE WILL TAKE PLACE.
WARREN
Date: 15-SEP-73 1734 From: TEITELMAN

IF YOU ALSO   WANT RECORD TO CLISPIFY BACK TO LOWER CASE,
PUT (RECORDWORD . record) ON ITS PROPERTY LIST.
DONT FORGET TO PUT PROPERTIES ON BOTH UPPER AND LOWER
CASE IF YOU DO THIS SOTHAT (record --) WILL CAUSE A CALL TO RECCOMPOSE0.

WARREN
Date: 18-SEP-73  722 From: TEITELMAN

THE PARENTHESES ERROR THING IS DUE TO A NEW
"FEATURE" IN WHICH QUOTE GENERATES AN
ERROR IF GIVEN MORETHAN ONE ARGUMENT. HOWEVER,
I FORGOT THAT I PUT AN  XPRESSINOF THE FORM
(QUOTE & & &) ON HISTRY LIST.
ILL HAVE TO FIX THIS.

WARREN
Date: 18-SEP-73  810 From: TEITELMAN
- - - -
I FIXED THE PARENTHESES ERROR PROBLEM. GLAD YOU CAUGHT THAT.
I ALSO MADE RESPELLS SAVED UNDOABLY (IT WAS KIND OF HARD SINCE
AT THAT POINT THE HISTORY LIST IS IN A FUNNY STATE WITH
LISPXHIST BEING EBOUND SO THAT IF YOU SAY NO
THE PRINTING DOESNT GET ON IT, BUT I GUESS YOUR POIN
WAS WELL TAKEN). WITH RESPECT TO TRYING CROPFN AFTER
BEING  TOED ON CROPFNS -> CROPFN S. THAT IS TOO HARD.
THE POINT IS THAT IT IS ATTEMPTING SPELLING CORRECTION
ON THE WORD CROPFN AT THAT POINT  BECAUSE IT
IS A LAMBDA VARIABE. AND WONT GET BACK TO TRYING IT AGAIN.
GIVEN  A COMPARISON BETWEEN CROPFNS AND CROPFN IT IS
MORE LIKELY TO BE A RUN ON ( I THINK) THAN A SIMPLE TYPO,
SINCE THE ODDS OF STICKING AN EXTRA CHARACTER IN
(A LOW PROBABILITY EVENT ANYWAY UNLESS IT IS A DOUBLE 
CHARACTER,I.E. CROPFNN IN WHICH CASE IT WOLD CORRECT TO CROPFN,
ARE SMALL COMPARED TO THE ODDS THAT IT IS A RUNON.
AND I CANT TRY BOTH BECAUSE IT COMES BACK WITH
THE INFO THAT THIS MIGHT BE A RUNON AND THEN CONTINUES
DOWN THE SPELLING LIST (THERE MIGHT BE A CROPFSN  OR SOMETHING
LATER ON WHICH IS A BETTER MATCH). AT THE TIME YOU
ARE ASKED, CHOOZ IS ALREADY FINISHED AND EXITED, AND
CANT GET BACK IN.  I THINK IN GENERAL THAT MOST
SPELLING MISTAKES DO NOT CONSIST OF ADDING AN EXTRA
CHARACTER ON. HOWEVER, YOU CAN DEFET THE RUNON CORRECTION,
BY TURNING OFF A FLAG, IN WHICH CASE IT WOLD 
GIVE YOU THE CROPFNS --> CROPFN, BUT WOLD NEVER DO RUNONS.


WARREN
Date: 19-SEP-73  215 From: TEITELMAN

RECEIVED YOUR THREE BUG REPORTS. 
ALL SEEM VALID, AND WILL FIX A.S.A.P.

WARREN
Date: 19-SEP-73  337 From: GUEST Re:   labeller paper
- - - -
two things.
1) i'd like you to take a look at &j525.kernel.technique.try2
on sys12 (wyl).  it's my second iteration. (you might like to see
kernel.technique itself, too).  May be to simple, but i'd like your comments
2) dennis and i went over the whole paper, doing some chopping(literally)
and pasting. we changed the order of some things a
bit and added a connecting phrase or two
to make it more readable.  as soon as 
there is an on-line version, i'll let you know.

ray
FROM MASINTER RE: RECORDS:

THINGS ARE WORKING QUITE WELL; THERE ARE JUST A FEW THINGS I NEED...

1) CAN YOU, IN CLISPIFY, AFTER CHECKING THE GETHASH AND FINDING
SOMETHING, CHECK IF THE CAR OF THE FORM IS
 (A) EITHER COMPOSE OR compose
   (B) (LISTP (GETP (CAR FORM) (QUOTE ACESSFN]
  AS BOTH COMPOSE AND THE FIELD REPLACES ARE DONE BY FIRST
  DWIMIFYING AND THEN HIDING THE MEANING UNDERNEATH....

2) I DON'T KNOW HOW TO GET "COMPOSE" AND "USING" TO LOWERCASE
ON CLISPIFICATION... THE CLISPWORD PROP, PUTTING ON
CLISPWORDS, DOESN'T SEEM TO WORK.... I LOOKED AT THE CODE AND IT
LOOKS LIKE A LITTLE DIDDLE... JUST A GLITCH
THAT I DON'T THINK CAN BE DONE WITHOUT MODIFYING YOUR CODE...

3) I've implemented some of it via DWIMUSERFN... if you'd
   incorporate that into the dwim stuff, we could leave
  DWIMUSERFN for users...

.....

the files are RECORD and RECORD.COM, with copies on <NEWLISP>

try it!.
			LARRY
Date: 28-SEP-73 2322 From: TEITELMAN Re:   FIRST OF MANY
- - - -

I DECIDED TO DO AWAY WITH NORMAL AND STANDARD.
CLISPDEC(STANDARD) NOW MEANS RPLACA AS OPPOSED TO FRPLACA,
MEMB AS OPPOSED TO MEMB, ETC.
THERE IS NO CLISPDEC(NORMAL)
AND THE INITIAL SETTING FOR THE SYSTEM IS
CLISPDEC((STANDARD INTEGER))

WARREN
Date: 28-SEP-73 2337 From: TEITELMAN Re:   2

UNDOCUMENTED  FEATURE -
YOU ASKED FOR A WAY OF LOOKING UP THE VALUE OF A VARIABLE IN
A LOCAL DECLARATON. 
CALL CLISPLOOKUP WITH ITS FIRST ARGUMENT, WORD, THE NAME OF
THE VARIABLE, AND ITS FIFTH ARGUMENT, CLASS, THE ATOM VALUE.
CLISPLOOKUP WILL RETURN WITH CAR OF THE ATOM AS ITS VALUE IF
THERE IS NO LOCAL DECLARATION RELEVANT. YOU MAKE DECLARATIONS
BY WRITING SOMETHING OF THE FORM (VARIABLE = EXPRESSION)
IN THE DECLARATIONS. IF SUCH  DECLARATION APPEARS,
THE VALUE OF THE LOOKUP IS THE ESUT OF EVALUATING EXPRESSION.
E.G. (VARDEFAULT = T) WILL RETURN T.

NEW LOADUP TO BE AVAILALBE SOON. SORRY TO BE SO LONG.

I AM TRYING TO GET IT ALL DONE.

WARREN
Date: 28-SEP-73 2348 From: TEITELMAN
- - - -
WHEN LOADING MATCH.COM I GOT AN EQLENGTH NOT DEFINED
WHEN LINK TRIED FROM MATCHBLOCK. GUESS
YOU SHOULD REARRANGE YOUR BLOCK DECLARATIONS.

WARREN
Date: 29-SEP-73 1513 From: TEITELMAN

OK, I THINK I GOT EVERYTHING COVERED.

FIRST, PATTERNS NOW DWIMIFY TO EXPRESSIONS OF THE
FORM (match EXPR PATTERN). THEY  CLISPIFY
BACK CORRECTLY. FURTHERMORE, IF YOU EDIT THE 
EXPRESSION BY DOING AN R, THEREBY CAUSING THE TRANSLATON TO
GO AWAY, DWIMIFY KNOWS ABOUT match. THIS SEEMED LIKE ONE OF
YOUR BETTER IDEAS.

SIMILARY, LOCAL DECLARATIONS OF RECORDS DWIMIFY TO ONE OF
TWO FORMS (fetch FIELD of ARG) or (set FIELD of ARG to --).
I CALL THE FUNCTION CLISPRECORD WITH TWO ARGUMENTS,THE
FIRST THE LOCAL DECLARATION, THE SECOND ONE OF THE ABOVE.
((THE REASON FOR NOT BURSTING THEM APART IS THAT
IT MAKES IT EASIER TO HANDLE THE CASE WHERE THE USER
EDITS THE EXPRESSION, CHANGING PERHAPS THE ARG NAME,
AND THEN REDWIMIFIES. NOW IT ISNT IN COLON NOTATION,
SO IT IS EASIER JUST TO CALL YOU). CLISPRECORD
IS RESPONSIBLVE FOR DOING THE CLISPTRAN. 
THE VALUE OF CISPRECORD IS NOT USED.

I WAS ABLE TO RESOLVE THE HASH PROBLEM (I EXPERIMENTED
AND THRASHED ARUND WITH ABOUT TWENTY DIFFERENT
CONFIGURATIONS OF CLISPATOM2 CLISPATOM2D AND CLISPCAR/CDR -
IN FACT, DID YOU KNOW IN THE CURRENT SYSTEM  X:1:PATTERN DOESNT
WORK?)
SO THAT THE ONLY TIME IT HAS TO REHASH IS WHEN
THE ORIGINAL EXPRESSION WAS PARENTHESIZED, I.E.
(PRINT (X:FOO)) AS OPPOSED TO (PRINT X:FOO).

THE ONLY GLITCH FOR YOU TO BE  AWARE OF IS THE FOLLOWING:
IN THE CASE OF set, USE THE TAIL FOLLOWING THE to, 
NOT THE SINGLE ELEMENT, I.E. (CDR  (MEMB 'to --))
NOT CADR, BECAUSE THE ARGUMENT MAY NOT YET HAVE
BEEN DWIMIFIED. FOR EXAMPLE, YOU MAY GET CALLED
WITH (set FOO of X to A + B). THE DWIMIFICATION TAKES
PLACE LATER. IT IS IMPORTANT HOWEVER THAT YOU DO NOT
COPY THE TAIL, USE IT IDENTICALLY. I HOPE THIS DOESNT
CAUSE A PROBLEM. IF SO, I CAN LOOK AT IT AGAIN, BUT
FOR THE TIME BEING IT MADE THINGS CONSIDERABLY EASIER FOR
ME.   (CONTINUED)

WARREN
Date: 29-SEP-73 1533 From: TEITELMAN Re:   MORE

LARRY,

SAME GOES FOR (fetch FIELD of --) I.E. USE
THE TAIL AND DONT COPY IT. ALSO, YOU MIGHT CHECK
FOR THINGS LIKE (set FOO of X : 2 to --).
THIS WONT EVER HAPPEN FROM A COLON EXPRESSION , BUT
MIGHT IF THE USER EDITS IT. IN THIS CASE, 
YOU WILL HAVE TO USE AN LDIFF IN THE TRANSLATION.
THIS MEANS THAT WHILE THE (set ) EXPRESSION WILL
BE DWIMIFIED, THE EXPRESSION IN THE TRANSLATION
WONT BE UNTIL ....

BETTER IDEA:
IN THIS CASE, PUT IN PARENTHESES, I.E.
IF (CADDR (MEMB 'OF ...)  IS NOT EQ TO 'TO  THEN
DO A /RPLNODE. ACTUALLY YOU DONT NEED THE MEMB
BECAUSE THERE SHOULD ALWAYS BE ONLY ONE THING
IN THE FIELD POSITION.

I THINK I HAVE COVERED EVERYTHING, INCLUDING CLISPIFYING.
I WILL SEND YOU A MESSAGE AS SOON AS I GET IT LOADED UP.
PROBABLY LATER THIS AFTERNOON.


TO SUMMARIZE:
CLISPRECORD IS ONLY CALLED WHEN LOCAL DECLARATIONS
OF RECORDS ARE INVOLVED.

(YOU SHOULD CHECK AND MAKE SURE THAT LOCAL DECLARATIONS FOR FAST,
ETC. TAKE EFFECT APROPRIATELY FOR GLOBAL RECORD DECLARATIONS, I.E.
THAT I GET THE RIGHT /SETFOO, SETFOO, OR FSETFOO OR WHATEVER).

IN THIS CASE IT IS GIVEN THE CORRESPONDING DECLARATION
AND THE EXPRESSION, OF THE FORM (fetch FIELD of --)
or (set FIELD of -- to --)
TAILS ARE PERMITTED FOR --, I.E. -- MAY BE A SEGMENT.
IN THE CASE OF THE LAST TAIL, YOU SHOULD USE THAT STRUCTURE
IDENTICALLY, SO THAT SUBSEQUENT DWIMIFICATION WILL
FIX IT. IN THE CASE OF THE TAIL BETWEEN
of AND to IN set, THIS CAN ONLY OCCUR
IF THE USER EDITS THE EXPRESSION HIMSELF. IN THIS CASE

OK. THINK I GOT IT MORE STRAIGHT IN MY HEAD.
IT IS NECESSARY THAT YOU USE THE LAST TAIL IN BOTH
FETCH AND SET, AS EVEN WHEN COMING FROM COLON NOTATON,
THEY HAVE NOT YET BEEN DWIMIFIED, AND EVEN IF ATOMIC,
I.E. (fetch FOO of X) YOU SHOULD USE(X) NOT X IN
YOUR EXPANSION BECAUSE IF X IS MISSPELLED IT WILL
BE CORRECTED IN THAT TAIL.

FOR CASES WHERE fetch OR set ARE ENCOUNTERED DIRECTLY,
I WILL FIRST DWIMIFY THEM, SO THAT YOU NEEDN'T WORRY
ABOUT DOING ANYTHING WITH THE CASE
OF (set FOO of X ← Y to Z) BECAUSE THAT SHOULD NEVER
HAPPEN. IN FACT, YOU CAN CHECK AND IF THERE IS NOT ONE
AND ONLY ONE THING BETWEEN THE of AND to, ABORT.
I WAS TRYING TO BALANCE EFFICIENCY AND COVERING ALL CASES.
THE CONFIGURATION I NOW HAVE  MAKES IT SIGHTLY MORE
INEFFICIENT WHEN THE USER EDITS THE fetch OR set
EXPRESSION WITHOUT CONVERTING IT BACK, BUT ONLY SLIGHTLY,
I.E. THE EXTRA CALL TO DWIMIFY, WHEREAS IN THE NORMAL
COURSE OF ANALYZING A COLON EXPRESSON, THE FUNCTIONS KNOW
AT ALL TIMES JUST WHAT HAS TO BE DONE, AND WHAT HAS ALREADY
BEEN DONE. 

WARREN
Date:  1-OCT-73 2018 From: TEITELMAN
LARRY,

I DONT HAVE A FUNCTIONNAMED DWIMIFY1C. WHAT DI YOU SEE
 - GIVE ME MORE INFO.
WARREN
Date:  2-OCT-73  045 From: TEITELMAN
THE NAME OF THE VARIABLE YOU WANT IS CALLED RAISEFLG.
RAISEFLG T CORRESONDS TO (RAISE T). YOU MUST
SET RAISEFLG IF YOU CALL RAISE, SINCE IT IS A SUBR
AND I CANT FIX IT TO DO IT AUTOMATCALLY. LOWERCASE(T)
DOES A RAISE() (STANDARD SETTING IN OUR SYSTEM) AND LOWERCASE(NIL)
DOES A RAISE(T). YOU CAN HAVE LOWERCASE(T) AND
(RAISE (SETQ RAISEFLG T)) FOR YOUR STANFORD CONFIGURAION.

WARREN
Date:  2-OCT-73  100 From: TEITELMAN
LARRY,

PLEASE PUT NEW RECORD, AND ANY OTHER FILES YOU MAKE, ON
NEWLISP, NOT LISP. THAT WAY I AM REMINDED TO FTP IT
TO BBN.

WARREN
Date:  2-OCT-73  114 From: TEITELMAN
ON YOUR REQUEST FOR
CLISPLOOKUP1 TO ALLOW A RECORD DECLARATION OF THE FORM
(TYPERECORD --) TWO THINGS. FIRST , WHAT IS THIS USED FOR?
SECOND, WILL THE CALL TO CLISPLOOKUP STILL
SPECIFY RECORD AS A CLASS AGUMENT, OR DO YOU
WANT RECORDS TO GET RECORDS, AND TYPERECORDS TO GET
ONLY TYPERECORDS.

WARREN
Date:  3-OCT-73 1327 From: TEITELMAN
LARRY,

YOU DIDNT ANSWER ME ABOUT TYPERECORD DELCARATONS.
FIRST OF ALL, WHAT IS A TYPERECORD - I PRESUME
FROM ANALOGY WITH RECORD THAT USER CAN SAY
(TYPERECORD --). DO YOU WANT CLISPLOOKUP TO RETURN
TYPERECORD DECLARATIONS ONLY WHEN CLASS IS TYEPRECORD,
OR IS TYPERECORD OR RECORD AN ACCEPTABLE RESPONSE
FOR EITHER RECORD OR TYPERECORD LOOKUPS?

WARREN
Date:  3-OCT-73 1751 From: TEITELMAN Re:   CLISPRECORD

OK, YOU ASKED FOR IT! ONE FUNCTION. HERE ARE THE VARIOUS
WAYS IT GETS CAALED AND WHAT IT SHOULD DO.
CLISPRECORD IS A FUNCTION OF THREE ARGUMENTS, X, FIELD, AND SETQFLG.

ITS VALUE IS ALWAYS EITHER THE EXPRESSION TO BE INSERTED
INTO THE CODE, OR ELSE NIL- II WHICH CASE I WILL GENERATE
THE APPROPRIATE ERROR DIAGNOSTIC.

CLISPRECORD CAN BE CALLED WITH BOTH X AND FIELD SPECIFIED.
AND SETQFLG INDICATING WHETHER IT IS A FETCH
OR REPLACE. IN THIS CSE, IT DOES A LOCAL LOOKUP, AND IF
IT FINDS ONE, CONSTRUCTS AN APPROPRIATE FETCH EXPRESSON
DOES THE TRANSLATION AND THE HASING AND RETURNS THE FETCH.
FOR THE SETQFLG=T CASE, IT SHULD JUST CONSTRUCT AN
EXPRESSION CAR OF WHICH IS replace AND PUT ANYTHING ELSE
YOU LIKE IN THE LIST BECAUSE I WILL CALL YOU BACK ON
IT WHEN I GET THE RIGHT HAND OPERAND. IN THIS CASE,
I.E. THE SECOND CASE, THE RIGHT HAND OPERAND WILL BE
THE SECOND ARGUMENT TO CLISPRECORD, E.G.
FOR X:FOO←T YOU WILL BE CALLED FIRST WITH
(X FOO T) AND RETURN (replace --) WHERE -- CAN CONTAIN
THE RESULTS OF THE LOOKUP AND OTHER PRTIAL INFO,  THEN
YOU WILL GET CALLED WITH THAT EXPRESSION AND T T.
NOTE, DO THE LOOKUP ON THE FIRST CAAL IN EITHER CASE,
SINCE IF THERE IS NO  ECLARATION, I WANT TO GENERATE
THE ERROR AT THE TIME OF THE FIRST CALL, NOT THE ECOND.

IF THERE IS NO LOCAL DECLARATION IN EITHER CASE, CHECK
FOR A GLOBAL ONE, AND THEN IF RECORDHASHFLG IS T,
DO THE TRANSLATON AS THOUGH IT WERE A LOCAL DECLARATION,
I.E. MAKE A FETCH OR REPLACE EXPRESSION, HASH IN THE FIRST CASE ETC.

DO SPELLING CORRECTION ON RECORDSPLST AT APPROPRIATE POINT.


FINALLY, CLISPRECORD ALSO GETS CALLED WITH FIELD=NIL
IN WHICH CASE X IS THE ENTIRE EXPRESSION, I.E. A FETCH
OR REPLACE, AND YOU CAN PICK OUT THE FIELDS AND WHAT NOTS
FROM THAT EXPRESSION. DONT FORGET TO USE THE TAIL
IN ALL CASES.  NOTE THT I AM CALLING CLISPRECORD
TO HANDLE FETCH AND REPLACE, NOT RECCOMPOSE0, BECAUSE
I HAVE TO CHECK FOR THEM ANYWAY (CANT DO IT JUST BY
CLISPWORD) BECAUSE I NEED TO DWIMIFY BEFORE CALLING YOU.

LET ME KNOW IF ANY OTHER CONFIGURATION SEEMS DESIRABLE.

WHAT I HAD BEEN DOING MYSELF IN THE CASE OF X:FOO←T
WAS MAKING AN  XPRESSION OF THE FORM
(replace DECLARATION OPERAND FIELD) OR SOME SUCH THING.

WARREN
-------
Date:  3-OCT-73 1813 From: TEITELMAN
- - - -

IT SEEMS THE ONLY KLUGEY PART IS THAT
YOU GET CALLED ON EXPRESSION  OF THE FORM
(REPLACE X OF Y WITH Z) WHERE THE Z IS ALEADY IN
THERE, AND ALSO ON PARTIALLY PROCESSED
EXPRESSIONS OF THE FORM (REPLACE --) WHERE Z IS THE SECOND ARGUMENT.
YOU CAN DISTINGUISH THESE TWO CASES BY THE FACT THAT IN THE
SECOND CASE, SETQFLG IS T, AND IN THE FIRST IT IS NOT.
I GAVE SOME MORE THOUGHT TO TRYING TO ELEIMINATE THE
DOUBLE CALL, BUT THE ONLY THING I MIGHT DO WOULD BE TO CREATE
SOME EXPRESSION MYSELF IN CLISPCAR/CDR AND NOT CALL YOU
ON THE ← CASE UNTIL LATER, BUT THEN YOU WOULD STILL
NEED TO DISTINGUISH THESE TWO CASES. I WOULD
LIKE YOU TO MAKE ME A RECORD (COMPILING IS NOT NECESSARY)
FILE THAT I CAN LOAD AND CHECK OUT WITHOUT NECESSITATING
LOADING UP A WHOLE NEW SYSTEM. IF YOU WANT TO WORK IN
MY SYSOUT TO CHECK IT OUT A LITTLE, USE LISPY.SAV AND
WORK ON MY DIRECTORY.

WARREN
-------
Date:  4-OCT-73 1720 From: TEITELMAN Re:   YOUR MESSAGE

IN WHAT SYSTEM DID YOU GET A H.D.F. IN HELPFIX1 - IN
STRAIGHT LISP OR IN MY SYSOUT ? WHAT HAD YOU
JUST DONE? I DONT HAVE MY CRASTAL BALL WITH ME.

WARREN
-------
Date:  4-OCT-73 1758 From: TEITELMAN Re:   VARIOUS RECORD STUFF
1. DID YOU EVER RESOLVE THE PROBLEM YOU WWERE HAVING IN MAKING
THE FILEPACKGE BELIEVE IN RECORD STUFF? TRY IT AGAIN.

2. WHAT ARE THE NAMES OF THE ARGUMENTS TO RECORD, TO CREATE,
AND TO TYPERECORD?

3. I THINK IT CONVEIENT IF YOU PERMIT BLANK FIELDS TO
BE SPECIFIED BY NIL. THATIS ESSENTIALLY WHAT YOU DO ALEADY
FOR CDR, E.G. THE USER CAN SAY
(RECORD FOO (A B . C)) OR (RECORD FOO (A B)) THE DIFFERENCE
BEING IN THE SCOND HE ISNT INTERESTED IN THE CDDR FIELD.
SIMILARLY, HE SHOULD BE ABLE TO SAY
(RECORD FOO (A NIL B)) THIS WILL B USEFUL FOR THE APPLICATION
WHERE THE USER WILL APPLY SEVERAL DIFFERENT RECORDS TO THE
SAME DATA STRUCTURE DEPENDING ON CONTEXT,  LIKE
PUTTING SEVERAL TRANSPARENCIES OVER THE SAME DRAWING.

4. I TRUST THAT YO DWIMIFY IN PROCESSING CREATE SO THAT
THINGS LIKE (CREATE FOO X ← Y + Z) WITH THE EXTRA SPACES, WORK.
I TRUST YOU ALSO DWIMIFY FOLLOWING THE USING  XPRESSION SO
THAT  USING X + Y * Z WILL WORK. 

5. CAN THE USER DECLARE A LOCAL TYPERECORD?

6. HAVE YOU BEEN ABLE TO IMPLEMENT GLOBALS SO THAT
FUNCTION DEFINITIONS AND MACROS FOR FAST AND UNDOABLE ARE
ONLY GENERATED WHEN NEEDED? I DOCUMENTED IT THAT WAY.

7. I THINK MAYBE RECORD AND TYPERECORD  SHOULD BE
FUNCTIONS. SINCE THEY DONT DWIIFY INTO ANYTHING,
WHAT HAPPENS IF THE USER COMPILES A FUNCTION CONTAIING
A RECORD EXPRESSION, II.E. IT IS AN INITIALIZATION
FUNCTION FOR A PACKAGE, AND HE COMPILES THE PACKAGE.

8. ONE OF THE MAIN ADVANTAGES OF GLOBAL DECLARATION IS
THAT THE USER CAN SIPLY CHANGE THE DECLARATION AND DOESNT
HAVE TO ECLISPIFY OR ANYTHING. HE CAN EVEN HAVE COMPILED
CODE. HOWEVER, THIS DOESNT WORK WITH RESPECT TO CREATES.
I.E. IF I DO A (RECORD FOO --) AND THEN SEVERAL (CREATES --)
APPEAR IN MY CODE, AND I RUN IT, AND THEN CHANGE THE DECLARATION
FOR FOO, HOW WILL THE CREATES BE UPDATED? I THINK MAYBE
YOU OUGHT TO CONSIDER AN IMPLEMENTATION CORRESPONING
TO THE GLOBAL/LOCAL TRADEOFF FOR CREAES AS WEEL. A GLOBAL
CREATE  SHOULD GO THROUGH AN INTERMEDIATE FUNCTION,
LIKE MAYBE  MAKE.FOO WHICHUSES THE DECLARATION OR SOMETHING.
AND A LOCAL CREATE, OR IF RECORDHASHFLG IS T, SHOULD WORK
AS IT DOES OW.

9. I PRESUME THATTHE NAMES FOR YOUR  GENERATED
ACCESS FUNCTIONS ARE OF THE FORM  GET.FOO  AND FOR THE
STORE FUNCTIONS SET.FOO OR REPLAC.FOO (WHICH). IN ANY EVENT,
IT NO LONGER IS NECESSAR THAT  FIELD NAMES BE UNIQUE
FROM FUNCTION NAMES, JUST THATTHEY BE UNIQUE FROM OTHER
FILED NAMES, RIGHT? IN THE CASE OF LOCAL DECLARATIONS,
THEY HAVE TO BE UNIQUE FROM OTHER FIELD NAMES WITHIN
THE SAME FUNCTION, RIGHT?



WARREN
From: MASINTER
I DON'T SEE A GOOD WAY AROUND DEFINING ALL OF THE FUNCTIONS BEFOREHAND
WITH GLOBAL RECORDS... IF USER SAYS
(RECORD A (B (C . D]
AND THEN WRITES (CLISP: UNDOABLE) X:C←'FOO,
AND RUNS IT, AND THEN MAKEFILES,
WHEN HE LOADS, HE'LL HAVE
(RECORD A (B (C . D] AND (/REPLACE.C X 'FOO]
THERE ISN'T AN EASY WAY FOR ME TO GET HOLD OF THAT /REPLACE.C;

I COULD PUT A CLISPWORD PROPERTY ON IT, FOR EXAMPLE, BUT
THAT'S ALMOST AS BAD AS DEFINING IT OUTRIGHT... BESIDES,
MANY OF THE PROBLEMS OF JUST DEFINEING THEM HAVE GONE AWAY...
I'VE REDUCED THE NUMBER OF UNDOSAVES, AND IF YOU
CAN GIVE ME A HANDLE INTO COMPILEUSERFN, I CAN ELIMINATE THE
MACROS.
-------
Date:  5-OCT-73 0306-EDT From: TEITELMAN 
- - - -

IF YOU ARE GOING TO MAPHASH THROUGH THE CLISPARRAY, THEN
THERE IS ABSOLUTELY NO JUSTFICATION FOR USING THE 
GET.FOO  REPLACE.FOO SCHEME OF IMPLEMENTING. MAYBE WE SHULD
JUST CONVERT EVERYTHING TO FETCHES AND REPLACES, AND LEAVE
THE ACCESSFN KLUDGE (UNDOCUMENTED) FOR YOU
AND PETER IF YOU WANT TO USE IT. CAN YOU COME IN TOMORROW
AND TALK ABOUT IT? I NEVER DID LIKE THE ACCESSFN
SCHEMA.

MEANWHILE, YOU SHOULD CERTAINLY CHECK FOR ACCESSFN. I THOUGHT
THAT WAS THE WAY GLOBAL DECLARATION WERE IMPLEMENTED ANYWAY.
WE NEED TO TALK MORE ABOUT THAT.

ALSO, I DONT UNDERSTAND PART OF YOUR MESSAGE.

I WOULD PREFER THAT YOU LEAVE IN THE TYPERECORD THING,
BUT THE CONVENIENCE OF BEING ABLE TO SAY FUMBLE? IS
SMALL COMPARED TO THE HASSLE WITH THE DECLARATIONS AND ALL.
WHY CANT THE USER JUST SAY  IF  X:1='FUMBLE     THATS
NOT SO MUCH LONGER THAN  IF FUMBLE? X AND ITS
ONE LESS ATOM, FUNCTION, MACRO, ET ALL TO WORRY ABOUT.

I HAVENT GOTTEN BACK TO CLISPIFICATIONS SO I AM SURE THAT IT DOESNT WORK
COMPLETELY.

HOW ABOUT GETTING LISTINGS OF YOUR LATEST STUFF AND LETS TALK TOMORROW.

WARREN
; THE JUSTIFICATION FOR USING THE ACCESSFN INSTEAD OF THE GETHASH
; IS THAT IT DOESN'T CLUTTER UP THE CLISPARRAY AND THAT IT IS VERY
; FAST -- I CAN DO A MOVD(CADDR GET.FOO) SO THAT (GET.FOO ...) CAN
; BE PUT IN EVEN VERY TIGHT LOOPS....
; THE MAPHASH WOULD BE
; (MAPHASH CLISPARRAY (F/L(X Y) (AND (EQ (CAR X)(QUOTE CREATE)) ...]

;I DONT THINK THAT WASHES. IF THE USER IS CONCERNED ABOUT
; EFIFICINECY, HE COMPILES, AND BOTH PRODUCE EQUIVALENT
; RESULTS, AS FAR AS CLUTTERING UP THE ARRAY. A GETHASH
; ONLY TAKES ABOUT 200 TO 500 MICROSECONDS, AND I THINK
; THAT THERE ARE NOT GOING TO BE AS MANY AS YOU THINK IN TERMS
; OF HS SHEER NUMBER. FOR EXAM BUTLER, WHO USES ITERATVE
; STATEMENTS A HELL OF A LOOOOOOOOAGE PR
;I DONT WANT TO TALK OVER THIS GODDAMN NETWORK.

; CAN I CALL YOU?
; OR I HAVE CLASSES IN THE MORNING AND A MEETING IN THE AFTERNOON TOMORROW.

;OK CALL ME NOW. 854-1862.
@BREAK (LINKS)